#pragma once

#include <windows.h>

extern "C" 
{
	#include <hidsdi.h>
}

using namespace System;

namespace HidLib
{
	public ref class HidDeviceCapabilities
	{
	public:
		HidDeviceCapabilities(HIDP_CAPS Caps);

		property UInt16 NumberFeatureDataIndices
		{
			UInt16 get() { return _NumberFeatureDataIndices; }
		};

		property UInt16 NumberFeatureValueCaps
		{
			UInt16 get() { return _NumberFeatureValueCaps; }
		};

		property UInt16 NumberFeatureButtonCaps
		{
			UInt16 get() { return _NumberFeatureButtonCaps; }
		}

		property UInt16 NumberOutputDataIndices
		{
			UInt16 get() { return _NumberOutputDataIndices; }
		}

		property UInt16 NumberOutputValueCaps
		{
			UInt16 get() { return _NumberOutputValueCaps; }
		}

		property UInt16 NumberOutputButtonCaps
		{
			UInt16 get() { return _NumberOutputButtonCaps; }
		}

		property UInt16 NumberInputDataIndices
		{
			UInt16 get() { return _NumberInputDataIndices; }
		}

		property UInt16 NumberInputValueCaps
		{
			UInt16 get() { return _NumberInputValueCaps; }
		}

		property UInt16 NumberInputButtonCaps
		{
			UInt16 get() { return _NumberInputButtonCaps; }
		}

		property UInt16 NumberLinkCollectionNodes
		{
			UInt16 get() { return _NumberLinkCollectionNodes; }
		}

		property array<UInt16>^ Reserved
		{
			array<UInt16>^ get() { return _Reserved; }
		}

		property UInt16 FeatureReportByteLength
		{
			UInt16 get() { return _FeatureReportByteLength; }
		}

		property UInt16 OutputReportByteLength
		{
			UInt16 get() { return _OutputReportByteLength; }
		}

		property UInt16 InputReportByteLength
		{
			UInt16 get() { return _InputReportByteLength; }
		}

		property UInt16 UsagePage
		{
			UInt16 get() { return _UsagePage; }
		}

		property UInt16 Usage
		{
			UInt16 get() { return _Usage; }
		}

	private:
		UInt16 _Usage;
		UInt16 _UsagePage;
		UInt16 _InputReportByteLength;
		UInt16 _OutputReportByteLength;
		UInt16 _FeatureReportByteLength;
		array<UInt16>^ _Reserved;
		UInt16 _NumberLinkCollectionNodes;
		UInt16 _NumberInputButtonCaps;
		UInt16 _NumberInputValueCaps;
		UInt16 _NumberInputDataIndices;
		UInt16 _NumberOutputButtonCaps;
		UInt16 _NumberOutputValueCaps;
		UInt16 _NumberOutputDataIndices;
		UInt16 _NumberFeatureButtonCaps;
		UInt16 _NumberFeatureValueCaps;
		UInt16 _NumberFeatureDataIndices;
	};
}